'''
文件简介：主要功能为从指定的路径下面递归遍历找到该路径下的所有病例，然后返回随机的10个病例的ID和路径

'''
import os
import random
import pandas as pd

def find_tsv_files(root_dir):
    """
    递归遍历指定目录及其所有子目录，查找所有 .tsv 文件。
    
    参数:
    root_dir -- 根目录的路径
    """
    # 使用 os.walk 生成文件夹树中的文件名
    file_lists = []
    for folder, subfolders, files in os.walk(root_dir):
        # 遍历当前文件夹中的所有文件
        for file in files:
            # 检查文件扩展名是否为 .tsv
            if file.endswith('.tsv'):
                # 打印文件的完整路径
                file_lists.append(os.path.join(folder, file))
                # print(os.path.join(folder, file))
    return file_lists

def find_cases(root_dir):
    file_lists = []
    samplesheet_df = df = pd.read_csv('gdc_sample_sheet.2024-04-07.tsv',sep='\t',comment='#')
    for folder, subfolders, files in os.walk(root_dir):
        # 遍历当前文件夹中的所有文件
        for file in files:
            # 检查文件扩展名是否为 .tsv
            if file.endswith('.tsv'):
                # 文件的路径，和该文件所属的病例的类型--sample type
                file_lists.append([os.path.join(folder, file),samplesheet_df[samplesheet_df['File Name'] == file.split('\\')[-1]]['Sample Type'].item()])
                # print(os.path.join(folder, file))
    return file_lists

def get_10_random_cases(file_path = ""):
    file_list = find_tsv_files(file_path)
    random_integers = [random.randint(0, len(file_list)-1) for _ in range(10)]
    cases_list = []
    samplesheet_df = pd.read_csv('gdc_sample_sheet.2024-04-07.tsv',sep='\t',comment='#')
    for rd_int in random_integers:
        # print(file_list[rd_int])
        # print(samplesheet_df['File ID'] == 'fb103781-9cee-4e30-a864-3d4e9c5b32ae')
        # print(samplesheet_df[samplesheet_df['File Name'] == file_list[rd_int].split('\\')[-1]]['Case ID'].item())
        cases_list.append([file_list[rd_int],samplesheet_df[samplesheet_df['File Name'] == file_list[rd_int].split('\\')[-1]]['Case ID'].item()])
    return cases_list


if __name__ == '__main__':
    # rd_cases = get_10_random_cases('TCGA-BLCA\Solid Tissue Normal')
    # print(rd_cases)
    cases = find_cases('TCGA-BLCA')
    cases = pd.DataFrame(cases).iloc[0:,1].values
    print(cases)
    # file_list = find_tsv_files('TCGA-BLCA\Solid Tissue Normal')
    # print(file_list)